Stringgrid - autom. zvet. vysky radku podle obsahu bunky - podruhe
Otázka od: js-delphi@quick.cz
24. 5. 2004 10:08
Odesilatel: Lebeda David <david.lebeda@comarr.cz>
Datum: Ctvrtek, 20.kvetna 2004 - 1:27 odp.
> Ahoj,
>
> podivej se na funkci DrawText. Das-li ji do parametru DT_CALCRECT,
> funguje tak, ze
> nevykresli text, ale vrati TRect, do ktereho se text vejde (viz
> napr. zdrojak TLabelu). Tj.
> takto zjistis rozmery textu a pak uz jen zbyva nastavit vysku
> radku. Viz help k DrawText.
>
> David Lebeda
Ahoj.
Zkusil jsem to, koukal jsem i do ruznych zdrojaku, ale nedari se mi to udelat.
Muzete mi nekdo poradit kde delam chybu? Treba je to nejaka prkotina, ale
jak uz do toho dlouho koukam, tak ji treba nevidim...
procedure TfrmZaznamy.MujGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Akce: Cardinal;
R: TRect;
Tmp: AnsiString;
begin
With MujGrid Do Begin
tmp:=Cells[ACol, ARow];
// Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
OnDrawCell:=nil;
R:=Rect;
Akce := DT_LEFT or DT_TOP or DT_WORDBREAK;
if ACol = 4 then
begin
InflateRect(R, 2, 2);
DrawText(Canvas.Handle, PChar(tmp), length(tmp), R,
DrawTextBiDiModeFlags(DT_EXPANDTABS or Akce or DT_CALCRECT or
DT_NOPREFIX));
if RowHeights[ARow]<Abs(R.Top-R.Bottom) then
RowHeights[ARow]:=Abs(R.Top-R.Bottom);
end;
Canvas.FillRect(Rect);
InflateRect(R, -2, -2);
DrawText(Canvas.Handle, PChar(tmp), length(tmp), R, Akce);
OnDrawCell:=MujGridDrawCell;
End;
end;
Co je totiz divne, je to, ze kdyz se dostanu to teto udalosti, tak Rect ma
hodnoty napr. LT[244;21];RB[357;41]. No a kdyz chci zjistit, jak bude velky
tenhle "ctverec" po dosazeni textu, jeho zalomeni na vice radku atd., tak
dostanu LT[246;23];RB[249;36] coz je mnohem mensi nez ten puvodni - nevite teda
nekdo, kde delam chybu?
Diky vsem za Vas cas!
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.0.3
programator amater
Odpovedá: Lebeda David
31. 5. 2004 9:06
> procedure TfrmZaznamy.MujGridDrawCell(Sender: TObject; ACol, ARow:
> Integer;
> Rect: TRect; State: TGridDrawState);
> var
> Akce: Cardinal;
> R: TRect;
> Tmp: AnsiString;
> begin
> With MujGrid Do Begin
> tmp:=Cells[ACol, ARow];
> // Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol,
> ARow]);
> OnDrawCell:=nil;
> R:=Rect;
> Akce := DT_LEFT or DT_TOP or DT_WORDBREAK;
> if ACol = 4 then
> begin
> InflateRect(R, 2, 2);
> DrawText(Canvas.Handle, PChar(tmp), length(tmp), R,
> DrawTextBiDiModeFlags(DT_EXPANDTABS or Akce or DT_CALCRECT or
> DT_NOPREFIX)); if RowHeights[ARow]<Abs(R.Top-R.Bottom) then
> RowHeights[ARow]:=Abs(R.Top-R.Bottom);
> end;
> Canvas.FillRect(Rect);
> InflateRect(R, -2, -2);
> DrawText(Canvas.Handle, PChar(tmp), length(tmp), R, Akce);
> OnDrawCell:=MujGridDrawCell;
> End;
> end;
>
> Co je totiz divne, je to, ze kdyz se dostanu to teto udalosti, tak
> Rect ma hodnoty napr. LT[244;21];RB[357;41]. No a kdyz chci zjistit,
> jak bude velky tenhle "ctverec" po dosazeni textu, jeho zalomeni na
> vice radku atd., tak dostanu LT[246;23];RB[249;36] coz je mnohem mensi
> nez ten puvodni - nevite teda nekdo, kde delam chybu?
Ahoj,
a ten kod, cos sem napsal, se chova jak? Pri pouziti DrawText s DT_CALCRECT se
predpoklada, ze zadas obdelnik s pozadovanou sirkou, on do nej umisti text s
prislusnym zalomenim a vrati pak upraveny Bottom (pokud si to dobre pamatuji).
David Lebeda
************************************************************
David Lebeda, programator
ComArr s. r. o.
Tolarova 291, 533 51 Pardubice
Telefon: 466 889 111 (ustredna), 466 889 225 (prima linka)
Fax: 466 415 481
E-mail: lebeda@comarr.cz
http://www.comarr.cz
************************************************************